#include<iostream>
#include<cstdio>
using namespace std;

int dp[41][41][41][41];
int cards[5];

int map[400];

int n,m;

int Max(int i,int j,int k,int l){
	int max=0;
	if(i!=0){
		max=dp[i-1][j][k][l];
	}
	if(j!=0&&max<dp[i][j-1][k][l]){
		max=dp[i][j-1][k][l];
	}
	if(k!=0&&max<dp[i][j][k-1][l]){
		max=dp[i][j][k-1][l];
	}
	if(l!=0&&max<dp[i][j][k][l-1]){
		max=dp[i][j][k][l-1];
	}
	return max;
}

int main(){
	scanf("%d%d",&n,&m);
	
	for(int i=0;i<n;i++){
		scanf("%d",&map[i]);
	}
	
	for(int i=0;i<m;i++){
		int number;
		scanf("%d",&number);
		cards[number]++;
	}
	
	for(int z=1;z<=m;z++){
		for(int i=0;i<=z&&i<=cards[4];i++){
			for(int j=0;j<=z-i&&j<=cards[3];j++){
				for(int k=0;k<=z-i-j&&k<=cards[2];k++){
					for(int l=0;l<=z-i-j-k&&l<=cards[1];l++){
						if(i+j+k+l!=z){
							continue;
						}
						
						if(i*4+j*3+k*2+l>=n){
							z=0xFFFFFFF;
							i=0xFFFFFFF;
							j=0xFFFFFFF;
							k=0xFFFFFFF;
							break;
						}
						
						dp[i][j][k][l]=Max(i,j,k,l)+map[i*4+j*3+k*2+l*1];
					}
				}
			}
		}
	}
	
	int ans=0;
	
	for(int i=0;i<=cards[4];i++){
		for(int j=0;j<=cards[3];j++){
			for(int k=0;k<=cards[2];k++){
				for(int l=0;l<=cards[1];l++){
				    if(i*4+j*3+k*2+l!=n-1){
						continue;
					}
					
					ans=max(ans,dp[i][j][k][l]);
				}
			}
		}
	}
	
	cout<<ans+map[0];
	
	return 0;
}
